import WxValidate from '../../utils/WxValidate'
import utils from "../../utils/util"

const app = getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    userInfo: null
  },

  selectAddress() {
    wx.navigateTo({
      url: '../addressAdd/addressAdd',
    })
  },
  //初始化验证规则
  initValidate() {
    // 验证字段的规则
    const rules = {
      nickName: {
        required: true,
        maxlength: 10
      },
      phone: {
        required: true,
        tel: true
      }
    }
    // 验证字段的提示信息，若不传则调用默认的信息
    const messages = {
      nickName: {
        required: '请输入昵称',
        maxlength: '昵称不能超过10个字符'
      },
      phone: {
        required: '请输入手机号',
        tel: '请输入正确的手机号码'
      }
    }
    // 创建实例对象
    this.WxValidate = new WxValidate(rules, messages)
  },

  //昵称、手机号,输入框防抖
  timeID: 0, //定时器ID
  handleInput(e) {
    const {
      name
    } = e.currentTarget.dataset //获取绑定的data-name属性值
    const {
      value
    } = e.detail //获取输入的值
    clearTimeout(this.timeID); //清楚timeID对应的定时器，取消相应函数的执行
    this.timeID = setTimeout(() => {
      if (name == 'nickName') {
        this.setData({
          "userInfo.nickName": value
        })
      } else {
        this.setData({
          "userInfo.phone": value
        })
      }
    }, 1000)
  },

  //修改头像
  updateAvatar() {
    //调用wx.chooseMedia API打开图片选择窗口
    wx.chooseMedia({
      count: 1,
      mediaType: ['image'],
      sourceType: ['album', 'camera'],
      sizeType: ['original', 'compressed'],
      success: (res) => { //chooseMedia成功回调
        wx.showLoading({
          title: '上传中'
        })
        //使用wx.uploadFile将图片发至服务端上传
        wx.uploadFile({
          filePath: res.tempFiles[0].tempFilePath, //文件暂存路径
          name: 'img', //文件对应的 key
          url: `${app.globalData.server}/uploadImg`, //服务端路由
          success: (result) => { //成功回调
            //result.data为字符串，使用JSON.parse转成对象
            let filePath = JSON.parse(result.data).path;
            //文件路径为\反斜杠，需要转为斜杠/，使用正则表达式进行过滤转换
            filePath = filePath.replace(/\\/g, '/');
            //console.log(filePath)
            let userInfo = this.data.userInfo;
            //将完整的文件路径（含有域名信息）赋值给userInfo
            userInfo.avatarUrl = `${app.globalData.server}/${filePath}`;
            this.setData({
              userInfo: userInfo
            })
            wx.hideLoading({})
            wx.showToast({
              title: '上传成功',
              icon: "success"
            })
          },
          fail: (e) => {
            //失败回调
            console.log(e)
            wx.hideLoading({})
            wx.showToast({
              title: '上传失败',
              icon: "error"
            })
          }
        })
      },
      fail: error => {
        //chooseMedia失败回调
        console.log(error)
        wx.showToast({
          title: '上传失败',
          icon: "error"
        })
      }
    })
  },

  //表单验证错误提示
  showValidateModal(error) {
    wx.showModal({
      content: error.msg,
      showCancel: false,
    })
  },

  //保存表单
  submitForm() {
    //params保存需要验证的数据对象
    const params = this.data.userInfo
    //表单验证
    if (!this.WxValidate.checkForm(params)) {
      const error = this.WxValidate.errorList[0];
      this.showValidateModal(error);
      return false;
    }
    //表单验证完毕，接下来向后端发送数据
    //加载中
    wx.showLoading()
    //向服务端发送请求
    wx.request({
      url: `${app.globalData.server}/wxUpdateUserInfo`,
      method: 'POST',
      data: {
        openid: params.openid,
        avatarUrl: params.avatarUrl,
        nickName: params.nickName,
        phone: params.phone
      },
      success: res => {
        wx.hideLoading()
        //console.log(res)
        if (res.data.status === 'success') {
          //更新缓存
          wx.setStorageSync('userInfo', params)
          //更新全局变量
          app.globalData.userInfo = params
          //提示
          wx.showToast({
            title: '修改成功',
            icon: 'success'
          })
          //跳转至个人中心页面
          setTimeout(() => {
            wx.switchTab({
              url: '../person/person',
            })
          }, 1000)
        } else {
          //提示
          wx.showToast({
            title: '修改失败',
            icon: 'error'
          })
        }
      },
      fail: err => {
        wx.hideLoading()
        console.log(err)
        //提示
        wx.showToast({
          title: '修改失败',
          icon: 'error'
        })
      }
    })
  },

  //注销登录
  quit() {
    wx.removeStorageSync('userInfo');
    app.globalData.userInfo = null;
    wx.switchTab({
      url: '../person/person',
    }).then(res => {
      utils.pageOnLoad()
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const userInfo = wx.getStorageSync('userInfo') //读取缓存中的userInfo
    this.setData({
      userInfo
    })

    //加载表单验证规则
    this.initValidate();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})